///****************************************************************************
//**
//** Copyright (C) 2016 The Qt Company Ltd.
//** Contact: https://www.qt.io/licensing/
//**
//** This file is part of the QtCore module of the Qt Toolkit.
//**
//** $QT_BEGIN_LICENSE:BSD$
//** Commercial License Usage
//** Licensees holding valid commercial Qt licenses may use this file in
//** accordance with the commercial license agreement provided with the
//** Software or, alternatively, in accordance with the terms contained in
//** a written agreement between you and The Qt Company. For licensing terms
//** and conditions see https://www.qt.io/terms-conditions. For further
//** information use the contact form at https://www.qt.io/contact-us.
//**
//** BSD License Usage
//** Alternatively, you may use this file under the terms of the BSD license
//** as follows:
//**
//** "Redistribution and use in source and binary forms, with or without
//** modification, are permitted provided that the following conditions are
//** met:
//**   * Redistributions of source code must retain the above copyright
//**     notice, this list of conditions and the following disclaimer.
//**   * Redistributions in binary form must reproduce the above copyright
//**     notice, this list of conditions and the following disclaimer in
//**     the documentation and/or other materials provided with the
//**     distribution.
//**   * Neither the name of The Qt Company Ltd nor the names of its
//**     contributors may be used to endorse or promote products derived
//**     from this software without specific prior written permission.
//**
//**
//** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
//**
//** $QT_END_LICENSE$
//**
//****************************************************************************/
//
//#include "geometryengine.h"
//
//#include <QVector2D>
//#include <QVector3D>
//
//struct VertexData
//{
//    QVector3D position;
//    //QVector2D texCoord;
//};
//
////! [0]
//GeometryEngine::GeometryEngine()
//    : indexBuf(QOpenGLBuffer::IndexBuffer)
//{
//    initializeOpenGLFunctions();
//
//    // Generate 2 VBOs
//    arrayBuf.create();
//    indexBuf.create();
//
//    // Initializes cube geometry and transfers it to VBOs
//    initCubeGeometry();
//}
//
//GeometryEngine::~GeometryEngine()
//{
//    arrayBuf.destroy();
//    indexBuf.destroy();
//}
////! [0]
//
//void GeometryEngine::initCubeGeometry()
//{
//    VertexData vertices[] = {
//		{QVector3D(0.0f, 0.0f, 1.0f)},					// v0
//		{QVector3D(0.5f, 0.87f, 0.0f)},			// v1
//		{QVector3D(1.0f, 0.0f, 0.0f)},					// v2
//		{QVector3D(0.5f, -0.87f, 0.0f)},			// v3
//		{QVector3D(-0.5f, -0.87f, 0)},		// v4
//		{QVector3D(-1.0f, 0.0f, 0.0f)},				// v5
//		{QVector3D(-0.5f, 0.87f, 0.0f)}			// v6
//    };
//
//    GLushort indices[] = {
//		0, 1, 2,
//		0, 2, 3,
//		0, 3, 4,
//		0, 4, 5,
//		0, 5, 6,
//		0, 6, 1,
//		0, 1, 2
//    };
//
////! [1]
//    // Transfer vertex data to VBO 0
//    arrayBuf.bind();
//    arrayBuf.allocate(vertices, 7 * sizeof(VertexData));
//
//    // Transfer index data to VBO 1
//    indexBuf.bind();
//    indexBuf.allocate(indices, 18 * sizeof(GLushort));
////! [1]
//}
//
////! [2]
//void GeometryEngine::drawCubeGeometry(QOpenGLShaderProgram *program)
//{
//    // Tell OpenGL which VBOs to use
//    arrayBuf.bind();
//    indexBuf.bind();
//
//    // Offset for position
//    quintptr offset = 0;
//
//    // Tell OpenGL programmable pipeline how to locate vertex position data
//    int vertexLocation = program->attributeLocation("a_position");
//    program->enableAttributeArray(vertexLocation);
//    program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, sizeof(VertexData));
//
//    // Offset for texture coordinate
//    offset += sizeof(QVector3D);
//
//    // Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
//    int texcoordLocation = program->attributeLocation("a_texcoord");
//    program->enableAttributeArray(texcoordLocation);
//    program->setAttributeBuffer(texcoordLocation, GL_FLOAT, offset, 2, sizeof(VertexData));
//
//    // Draw cube geometry using indices from VBO 1
//    glDrawElements(GL_TRIANGLE_STRIP, 21, GL_UNSIGNED_SHORT, 0);
//}
////! [2]
